.

Criando Jobs do Gerenciador de Mailing

846 Visualizações
30, novembro de 2021
Ailton Júnior

Na implantação do Gerenciador de Mailing do nMonitor, torna-se necessário criar 3 procedures e seus respectivos Jobs no SQL Server Agent, conforme detalhamento abaixo.

⚠️ Atenção: Os scripts abaixo devem ser executados somente por administradores do banco de dados.
Antes de executar, ajuste as variáveis iniciais conforme o ambiente de implantação.

🔧 Variáveis de ambiente (ajustar antes da execução)

DECLARE @Sigla VARCHAR (20) = 'SIGLA_AMBIENTE'   -- Ex: RGSMGF, TACTIUM, etc.
      , @Banco VARCHAR (20) = 'DATABASE'         -- Nome do banco de dados do discador (base histórica)
      , @Usuario VARCHAR (20) = 'USUARIO_DATABASE' -- Owner do job
      , @PathLayout VARCHAR(800) = '\\caminho\para\layout\'  -- Apenas para Job 2

📌 Job 1 – Monitora Agendamento de Mailing

Item Descrição
Job TACTIUM – Monitora Agendamento de Mailing
Procedure SP_GeraMailingAgendado
Objetivo Gerar segmentos de mailings para discagem que estejam agendados ou em fila
Local de execução Banco do TactiumIP (base histórica)
Comando Exec SP_GeraMailingAgendado
Periodicidade A cada 10 segundos

🧾 Script de criação do Job 1

USE [msdb]
GO

BEGIN TRANSACTION
DECLARE @Sigla VARCHAR (20) = 'SIGLA_AMBIENTE' 
      , @Banco VARCHAR (20) = 'DATABASE'
      , @Usuario VARCHAR (20) = 'USUARIO_DATABASE'

DECLARE @NomeJob VARCHAR(255) = Concat(@sigla, ' - Monitora Agendamento de Mailing')
      , @NomeEtapa VARCHAR(255) = Concat(@sigla, ' - Gera Mailing Agendado')
      , @StartDate INT = FORMAT(GETDATE(), 'yyyyMMdd')

DECLARE @schedule_uid UNIQUEIDENTIFIER; 
DECLARE @ReturnCode INT = 0

IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class=1)
BEGIN
    EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]'
    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END

DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=@NomeJob, 
    @enabled=1, 
    @notify_level_eventlog=2, 
    @notify_level_email=2, 
    @notify_level_netsend=0, 
    @notify_level_page=0, 
    @delete_level=0, 
    @description=N'Nenhuma descrição disponível.', 
    @category_name=N'[Uncategorized (Local)]', 
    @owner_login_name=@usuario, 
    @notify_email_operator_name=N'Sac Tactium', 
    @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=@NomeEtapa, 
    @step_id=1, 
    @cmdexec_success_code=0, 
    @on_success_action=1, 
    @on_success_step_id=0, 
    @on_fail_action=2, 
    @on_fail_step_id=0, 
    @retry_attempts=0, 
    @retry_interval=0, 
    @os_run_priority=0, 
    @subsystem=N'TSQL', 
    @command=N'Exec SP_GeraMailingAgendado', 
    @database_name=@Banco, 
    @flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'Execucao a cada 10 segundos', 
    @enabled=1, 
    @freq_type=4, 
    @freq_interval=1, 
    @freq_subday_type=4, 
    @freq_subday_interval=1,
    @freq_relative_interval=0, 
    @freq_recurrence_factor=0, 
    @active_start_date=@StartDate, 
    @active_end_date=99991231, 
    @active_start_time=0, 
    @active_end_time=235959, 
    @schedule_uid=@schedule_uid OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
    IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO

📌 Job 2 – Transfere Mailing para o Discador

Item Descrição
Job TACTIUM – Transfere Mailing para o Discador
Procedure SP_TransfereParaDiscador
Objetivo Transferir a lista de discagem do gerenciador de mailings para o discador
Local de execução Banco do TactiumIP (base histórica)
Comando Exec SP_TransfereParaDiscador @PathLayout, @Banco, 0
Periodicidade A cada 10 segundos

🧾 Script de criação do Job 2

USE [msdb]
GO

BEGIN TRANSACTION
DECLARE @Sigla VARCHAR (20) = 'SIGLA_AMBIENTE' 
      , @Banco VARCHAR (20) = 'DATABASE'
      , @Usuario VARCHAR (20) = 'USUARIO_DATABASE'
      , @PathLayout VARCHAR(800) = '\\caminho\para\layout\'

DECLARE @NomeJob VARCHAR(255) = Concat(@sigla, ' - Transfere Mailing para o Discador')
      , @NomeEtapa VARCHAR(255) = Concat(@sigla, ' - Transfere Mailing para o Discador')
      , @Comando VARCHAR(800) = Concat('Exec SP_TransfereParaDiscador ''', @PathLayout, ''', ''', @Banco, ''', 0')
      , @StartDate INT = FORMAT(GETDATE(), 'yyyyMMdd')

DECLARE @schedule_uid UNIQUEIDENTIFIER; 
DECLARE @ReturnCode INT = 0

IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class=1)
BEGIN
    EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]'
    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END

DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=@NomeJob, 
    @enabled=1, 
    @notify_level_eventlog=2, 
    @notify_level_email=2, 
    @notify_level_netsend=0, 
    @notify_level_page=0, 
    @delete_level=0, 
    @description=N'Nenhuma descrição disponível.', 
    @category_name=N'[Uncategorized (Local)]', 
    @owner_login_name=@Usuario, 
    @notify_email_operator_name=N'Sac Tactium', 
    @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=@NomeEtapa, 
    @step_id=1, 
    @cmdexec_success_code=0, 
    @on_success_action=1, 
    @on_success_step_id=0, 
    @on_fail_action=2, 
    @on_fail_step_id=0, 
    @retry_attempts=0, 
    @retry_interval=0, 
    @os_run_priority=0, 
    @subsystem=N'TSQL', 
    @command=@Comando, 
    @database_name=@Banco, 
    @flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'Execucao a cada 10 segundos', 
    @enabled=1, 
    @freq_type=4, 
    @freq_interval=1, 
    @freq_subday_type=4, 
    @freq_subday_interval=1,
    @freq_relative_interval=0, 
    @freq_recurrence_factor=0, 
    @active_start_date=@StartDate, 
    @active_end_date=99991231, 
    @active_start_time=0, 
    @active_end_time=235959, 
    @schedule_uid=@schedule_uid OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
    IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO

📌 Job 3 – Recebe resultado do Discador

Item Descrição
Job TACTIUM – Recebe resultado do Discador
Procedure SP_RecebeDoDiscador
Objetivo Transferir tentativas realizadas pelo discador para a base do gerenciador de mailings
Local de execução Banco do TactiumIP (base histórica)
Comando Exec SP_RecebeDoDiscador @Banco
Periodicidade A cada 1 minuto

🧾 Script de criação do Job 3

USE [msdb]
GO

BEGIN TRANSACTION
DECLARE @sigla VARCHAR (20) = 'SIGLA_AMBIENTE' 
      , @banco VARCHAR (20) = 'DATABASE'
      , @usuario VARCHAR (20) = 'USUARIO_DATABASE'

DECLARE @NomeJob VARCHAR(255) = Concat(@sigla, ' - Recebe resultado do Discador')
      , @NomeEtapa VARCHAR(255) = Concat(@sigla, ' - Recebe resultado do Discador')
      , @Comando VARCHAR(800) = Concat('Exec SP_RecebeDoDiscador ''', @Banco, '''')
      , @StartDate INT = FORMAT(GETDATE(), 'yyyyMMdd')

DECLARE @schedule_uid UNIQUEIDENTIFIER; 
DECLARE @ReturnCode INT = 0

IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class=1)
BEGIN
    EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]'
    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END

DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=@NomeJob, 
    @enabled=1, 
    @notify_level_eventlog=2, 
    @notify_level_email=2, 
    @notify_level_netsend=0, 
    @notify_level_page=0, 
    @delete_level=0, 
    @description=N'Nenhuma descrição disponível.', 
    @category_name=N'[Uncategorized (Local)]', 
    @owner_login_name=@usuario, 
    @notify_email_operator_name=N'Sac Tactium', 
    @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=@NomeEtapa, 
    @step_id=1, 
    @cmdexec_success_code=0, 
    @on_success_action=1, 
    @on_success_step_id=0, 
    @on_fail_action=2, 
    @on_fail_step_id=0, 
    @retry_attempts=0, 
    @retry_interval=0, 
    @os_run_priority=0, 
    @subsystem=N'TSQL', 
    @command=@Comando, 
    @database_name=@banco, 
    @flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'Execucao a cada 1 minuto', 
    @enabled=1, 
    @freq_type=4, 
    @freq_interval=1, 
    @freq_subday_type=4, 
    @freq_subday_interval=1,
    @freq_relative_interval=0, 
    @freq_recurrence_factor=0, 
    @active_start_date=@StartDate, 
    @active_end_date=99991231, 
    @active_start_time=0, 
    @active_end_time=235959, 
    @schedule_uid=@schedule_uid OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
    IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO

✅ Observações finais

  • As procedures (SP_GeraMailingAgendado, SP_TransfereParaDiscador, SP_RecebeDoDiscador) já devem existir no banco de dados do Tactium antes da criação dos Jobs.
  • Ajuste o parâmetro @freq_subday_interval para 10 segundos manualmente via interface do SQL Server Agent, se necessário, pois o T-SQL padrão não permite menos que 1 minuto diretamente.
  • O @PathLayout deve apontar para um diretório acessível pelo SQL Server.
  • O operador de e-mail Sac Tactium deve existir no SQL Server Agent ou pode ser removido/alterado conforme necessidade.
⚠️ Importante: Após criar os jobs, verifique se eles estão habilitados e com as permissões corretas para execução.

 


Este conteúdo foi útil para você?
[WPAC_LIKE_SYSTEM]